1. The Field of the Invention
The present invention relates to systems and methods for layering or accommodating link layer intermediate drivers in a computer network system. More specifically, the present invention relates to systems and methods for providing a common interface through which commands and messages may be passed between layers in a network stack.
2. The Relevant Technology
Historically, computer systems have presented and processed data resident within a local system. Modern computer systems are interconnected using network technologies that enable one computer to transfer or exchange substantial amounts of data with other computers. Originally, computers were directly connected one with another and exchanged information directly across a dedicated serial or parallel channel. Modern computer systems are coupled one to another through shared network techniques. Networking techniques such as Ethernet provide addressable messaging for data exchange across a shared network. As computer systems became more sophisticated and the need to exchange larger amounts of data increased, networking techniques were established wherein substantial amounts of data were broken into smaller segments or packets for efficient transfer across a computer network. Such packetizing of data required a computer-resident software application to partition bulk data into smaller enumerated packets. Furthermore, packets were dispatched across network interconnections by employing software drivers that controlled hardware modules. Because of the increased complexity in preparing and dispatching data onto the network, networking standards were established wherein defined functions were partitioned into separate distinct layers into what has become known as the OSI network model. Although some networking applications have implemented each of the seven established layers, the majority of applications implement only selective layers when preparing bulk data for transmission across a network. Two such layers incorporated by most networking stacks include a transport layer and a link layer. A driver or software module performs the assigned functionality for a specific layer, hence, a transport layer driver carries out the functionality of the transport layer while a link layer device driver performs the assigned functionality of the link layer.
FIG. 1 represents a prior art configuration of a network protocol stack 100 having a transport layer driver 102. Transport layer driver 102 traditionally performs partitioning or packetization of bulk data into manageable sized packets required by the network. Transport layer driver 102 prepares data into properly sized data packets and dispatches such data packets to link layer device drivers 108 and 118 for presentation to hardware or physical devices 110 and 120, respectively. Link layer device drivers 108 and 118 must each be written or designed to a specified interface 104 to permit compatible transfer of data therebetween.
Link layer device drivers may perform a specific function or process or a series of functions or processes on received data prior to dispatching such data to network hardware such as physical devices 110 and 120. For example, link layer device driver 108 is comprised of a function 112 followed by a function 114. Data passing from transport layer driver 102 to the network must traverse through these functions undergoing the respective processing. Link layer device driver 118 comprises function 114 and function 122 and subject data packets traversing from transport layer driver 102 to hardware 120 are subject to the processing contained within functions 114 and 122.
Although FIG. 1 illustrates an interface 104, each device driver only interfaces with this standardized interface at an entry point while all other internal functions are encapsulated within device driver 108 and 118. That is to say, any deletion, addition or modifications of functions within a device driver requires that the link layer device driver be re-written to provided compatible entry and exit points. Furthermore, when a plurality of link layer device drivers are present within a computer system, functions within various device drivers may be redundant, as depicted by function 114, yet required by each link layer device driver for properly processing the packetized data.
An example of how difficult modification of a link layer device driver may be is evidenced by what would be required to incorporate additional functionality into link layer device driver 108. If a user desired to incorporate function 122 into link layer device driver 108, they would be required to determine the proper format leaving function 114 through which function 122 must interface. Furthermore, function 122 would need to be physically replicated within link layer device driver 108 to perform the added new functionality. Rewriting of device drivers to incorporate additional functionality becomes extremely costly and difficult and frequently obsoletes existing hardware and device drivers or causes the user to forego incorporation of the additional functionality.
Thus, what is needed is a system and method for interfacing multiple device drivers enabling a first device driver to be called to perform its corresponding functions on packet data followed by the invocation of a second driver for performing a second set of processing functions on the processed data packet.
Also, what is needed is a system and method for incorporating additional functionality into a network protocol stack without having to totally rewrite a driver within the stack, thus preserving investments in existing or legacy drivers.